【小ネタ】1台のマネージドインスタンスを踏み台にして、多数のRasPiに選択メニューからsshするシェルを作ってみました
1 はじめに
CX事業本部の平内(SIN)です。
Amazon Systems Manager のインスタンスがある場合、AWS-StartSSHSessionでsshすることが可能です。 また、sshコマンドには、-J でその先の端末に接続する機能があります。
この機能を利用すれば、下図のように1台のSSMのインスタンスを踏み台にしてLAN内の端末にsshすることが可能です。
作成したシェルを実行している様子です。
ssh2というコマンドを実行すると、接続先の一覧が選択できるようになっており、選択して目的の端末にsshします。
2 コマンド
この動作は、下記のコマンドを実行することで可能です。
$ ssh -J pi@mi-087c4fde5181b453d -o ProxyCommand="sh -c \"aws ssm start-session --target %h --document-name AWS-StartSSHSession --parameters \"portNumber=%p\" --p {profileName}\"" pi@{instance-id}
そして、接続先を選択できるようにしたものが、下記のシェルです。
#!/usr/bin/python3 import os import inquirer import subprocess profile = 'developer' hostList = { "raspi-001":"192.168.0.104", "raspi-002":"192.168.0.109", "raspi-003":"192.168.0.110", "raspi-004":"192.168.0.111", "raspi-005":"192.168.0.112", } targets=[] for host in hostList: targets.append(host) questions = [ inquirer.List('host', message="Where are you going?", choices=targets ), ] answers = inquirer.prompt(questions) ip = hostList[answers["host"]] cmd = 'ssh -J pi@mi-087c4fde5181b453d -o ProxyCommand="sh -c \\"aws ssm start-session --target %h --document-name AWS-StartSSHSession --parameters \\"portNumber=%p\\" --p {}\\"" pi@{}'.format(profile,ip) os.system(cmd)
実行権を付与して、パスの通ったところに置いておくと、何処から出利用可能です。
$ ls -la /usr/local/bin | grep ssh2 -rwxr-xr-x 1 hirauchi.shinichi admin 768 9 17 14:06 ssh2
3 最後に
簡単ですが、SSMインスタンスを踏み台にしてSSHするシェルを書いてみました。
全部の端末にSSMエージェントを入れてしまえば、踏み台は必要ないのですが、今回は、1台だけしか無いと言う場合への適用例です。